/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.lcfgly.DatabaseFactory;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * 数据库工厂接口
 * @author lcfgly
 */
  public interface DataFactoryInterface extends Serializable {

     /**
      * 删除数据
      * @param table 表名
      * @param keyname 条件key
      * @param key 条件值
      * @return
      * @throws SQLException 
      */
      int delete(String table,String keyname,Object... key) throws SQLException;

      /**
       * 批量删除（Where ... In ...）
       * @param table 表名
       * @param keyname 条件key
       * @param keys 条件值集合
       * @return
       * @throws SQLException 
       */
      int delete_list(String table,String keyname,Object... keys) throws SQLException;
      
      /**
       * 插入数据
       * @param <T> 
       * @param object 插入的元素bean
       * @param table 表名
       * @return
       * @throws SQLException 
       */
      <T> int insert(T object, String table) throws SQLException;
      
      /**
       * 插入数据返回自增的ID
       * @param <T> 
       * @param object 插入的元素bean
       * @param table 表名
       * @return
       * @throws SQLException 
       */
      <T> int insertBackID(T object, String table) throws SQLException;

      /**
       * 批量插入
       * @param <T>
       * @param args 插入的元素bean集合
       * @param table 表名
       * @return
       * @throws SQLException 
       */
      <T> int[] insert_list(List<T> args, String table) throws SQLException;
    
      /**
       * 更新数据
       * @param <T>
       * @param table 表名
       * @param object 更新的元素bean
       * @param keyname 更新的条件key
       * @param key 更新的条件值
       * @return
       * @throws SQLException 
       */
      <T> int update(String table,T object,String keyname,Object... key) throws SQLException;
   
      /**
       * 查询单个指定bean数据
       * @param <T>
       * @param classtype 返回bean的类型
       * @param sql 查询语句
       * @param args 语句中的参数集合
       * @return
       * @throws SQLException 
       */
      <T> T one(Class<T> classtype,String sql,Object... args) throws SQLException;
    
      /**
       * 查询批量bean数据
       * @param <T>
       * @param classtype 返回bean的类型
       * @param sql 查询语句
       * @param args 语句中的参数集合
       * @return
       * @throws SQLException 
       */
      <T> List<T> rows(Class<T> classtype,String sql,Object... args) throws SQLException;
   
      /**
       * 批量数据查询
       * @param sql 查询语句
       * @param args 语句中的参数集合
       * @return
       * @throws SQLException 
       */
      List rowsWithOutObject(String sql,Object... args) throws SQLException;
   
   
      /**
       * 单条数据查询
       * @param sql 查询语句
       * @param args 语句中的参数集合
       * @return
       * @throws SQLException 
       */
      Map oneWithOutObject(String sql,Object... args) throws SQLException;
      
      /**
       * 查询数据返回集合数
       * @param sql 查询语句
       * @param args 语句中的参数集合
       * @return
       * @throws SQLException 
       */
      int Getrowsnum(String sql,Object...args) throws SQLException;
     
      /**
       * 分页处理
       * @param classtype 返回的数据bean类型(如果null,返回数据不封装成bean)
       * @param sql 查询语句
       * @param rowsnum 数据总条数
       * @param page 当前页面
       * @param pagecount 每页条数
       * @param args 查询语句参数
       * @return
       * @throws SQLException 
       */
     Map Page(Class classtype,String sql,int rowsnum,int page,int pagecount,Object...args)throws SQLException;
}
